// 引入http
let http = require('http');
// 引入fs模块
let fs = require('fs');
// 引入url模块
let url = require('url');
// 定义根目录
let root = process.cwd();
// 引入path
let path = require('path');
// 引入qs
let qs = require('querystring');

// 文档类型
let MINE_TYPES = {
	'html': 	'text/html',
	'xml': 		'text/xml',
	'txt': 		'text/plain',
	'css': 		'text/css',
	'js': 		'text/javascript',
	'json': 	'application/json',
	'pdf': 		'application/pdf',
	'swf': 		'application/x-shockwave-flash',
	'svg': 		'image/svg+xml',
	'tiff': 	'image/tiff',
	'png': 		'image/png',
	'gif': 		'image/gif',
	'ico': 		'image/x-icon',
	'jpg': 		'image/jpeg',
	'jpeg': 	'image/jpeg',
	'wav': 		'audio/x-wav',
	'wma': 		'audio/x-ms-wma',
	'wmv': 		'video/x-ms-wmv',
	'woff2': 	'application/font-woff2'
};


// 定义数组 用于存储所有人说的话
let msgArr = [];


// 创建服务器
let app = http.createServer(async (req, res) => {
    // 获取路径 
        // parse方法的第二个参数可以传递true 实现将query数据变为对象
    let url_obj = url.parse(req.url, true);
  
    // 为了防止读取到的是中文字符 要解码使用
    let pathname= decodeURIComponent(url_obj.pathname);

    // 定义变量简化书写
    let method = req.method.toUpperCase();

    
    // 获取文件的拓展名
    let ext = path.parse(pathname).ext.slice(1);

    // 将上面异步的写法 变成同步的写法 
    let data = await new Promise(resolve => {
        // 使用绝对路径
        fs.readFile(path.join(root, pathname), (err, data) => resolve(data && data));
    })

    // 没有内容
    if (!data) {
        // 设置响应头
        res.setHeader('Content-Type', 'text/plain;charset=utf-8');
        // 返回提示消息
        res.end(pathname + ' 没有找到');

        // 终止执行
        return;
    } 

    // 自适应MIME TYPE类型
    res.setHeader('Content-Type', MINE_TYPES[ext] + ';charset=utf-8');

    // 如果找到的话正常返回数据
    res.end(data);
})

// 监听端口号
app.listen(3000, () => console.log('listen server at 3000'));